package controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import modelo.Conversion;
import modelo.ConversionDAO;
import vista.VentanaConversion;

public class ControladorConversion implements ActionListener{//Aqui declaramos lo que vamos
	private VentanaConversion ventanaConversion;			//a utilizar en la clase
	private ConversionDAO conversionDAO = new ConversionDAO();
	private Conversion conversion = new Conversion();
	
	
	public ControladorConversion() {

		super();

		ventanaConversion = VentanaConversion.getInstancia();//Llamamos a la ventana conversion
		ventanaConversion.setLocationRelativeTo(null);		//y llenamos el combo de los cortes
		ventanaConversion.setVisible(true);
		ventanaConversion.agregarListener(this);
		ventanaConversion.setTiposCorteComboBox(conversionDAO.llenarComboTiposCorte());
		
	}
	
	/**************************************************************************/

	public void actionPerformed(ActionEvent ae) {
		if (ae.getActionCommand().equalsIgnoreCase("Guardar")) {//Cuando el usuario presione el boton guardar
			agregarConversion();								//llamamos al metodo de agregar conversion
																//encargado de registrar en la base de datos la conversion.
		}
		else if (ae.getActionCommand().equalsIgnoreCase("Modificar")) {//Cuando el usuario presione el boton modificar
			modificarConversion();										//llamamos al metodo de modificar conversion
		}																//encargado de modificar en la base de datos la conversion.
		
		else if (ae.getActionCommand().equalsIgnoreCase("Buscar")) {//Cuando el usuario presione el boton buscar
			buscarConversion();										//llamamos al metodo buscar conversion
																	// que se encarga buscar los datos de la conversion usando el codigo
		}
		
		else if (ae.getActionCommand().equalsIgnoreCase("Eliminar")) {//Cuando el usuario presione el boton eliminar
			eliminarConversion();										//llamamos al metodo eliminar conversion
		}															//que se encarga de elinar logicamente una conversion usando el codigo
		
		else if (ae.getActionCommand().equalsIgnoreCase("Limpiar")) {//Cuando el usuario presione el boton limpiar
																	//limpiamos los campos y setteamos el combo
			ventanaConversion.limpiarCampos();
			ventanaConversion.setTiposCorteComboBox(conversionDAO.llenarComboTiposCorte());
			
			
		}
		else if (ae.getActionCommand().equalsIgnoreCase("Cancelar")) {//cuando el usuario oprime cancelar se cierra la ventana
			ventanaConversion.dispose();
		}

	}

	/*********************************************************************************************/
	
	/*********************************************************************************************/

	public void agregarConversion() {

	if (ventanaConversion.validar() == true) {//validamos que los campos esten llenos.
	
			
			String codigoConversion = ventanaConversion.getCodigoConversion();//obtenemos el texto que tiene el campo de texto
			String tipoCorte = ventanaConversion.getTipoCorte();//obtenemos el texto de la opcion seleccionada en el combo
			float factor  = ventanaConversion.getFactor();			//obtenemos el valor del factor de conversion
			String codigoCorte = ConversionDAO.buscarCodigoCorte(tipoCorte);//buscamos el codigo del corte usando el nombre del corte
			
			conversionDAO.registrarConversion(codigoConversion, codigoCorte, factor);//Registramos en la base de datos la conversion con los 
																					//datos obtenidos
			ventanaConversion.mostrarMensaje("Se ha guardado exitosamente!");
			

			ventanaConversion.limpiarCampos();//limpiamos los campos
			ventanaConversion.setTiposCorteComboBox(conversionDAO.llenarComboTiposCorte());//setteamos el combo de cortes
			
			float suma = conversionDAO.buscarTotalFactor();//obtenemos la suma de los factores de conversiones que estan activos
			if (suma>1){//si la suma es mayor que 1, le informa al usuario que ha sobrepasado el limite
				ventanaConversion.mostrarMensaje("Se ha sobrepasado el factor total. Debe disminuir el factor (eliminando o modicando) conversiones.");
			}
			else if(suma<0.97){//si la suma es menor que 0.93 (margen de error de 0.03), le informa al usuario
				ventanaConversion.mostrarMensaje("La tabla de conversion no esta completa. Necesita completar el 100% de una pieza. \n Debe Agregar o modificar conversiones.");
			}

		}


	}
	
	public void modificarConversion() {
		if (ventanaConversion.validar() == true) {//validamos que los campos esten llenos.
	
			
			String codigoConversion = ventanaConversion.getCodigoConversion();//obtenemos el texto que tiene el campo de texto para buscar la conversion en la base de datos.
			String tipoCorte = ventanaConversion.getTipoCorte();//obtenemos el texto de la opcion seleccionada en el combo
			float factor  = ventanaConversion.getFactor();			//obtenemos el factor
			String codigoCorte = ConversionDAO.buscarCodigoCorte(tipoCorte);//buscamos el codigo del corte seleccionado usando el nombre del corte
			
			conversionDAO.modificarConversion(codigoConversion, codigoCorte, factor); //modificamos en la base de datos la conversion
			
			ventanaConversion.mostrarMensaje("Modificacion Exitosa!");
			

			ventanaConversion.limpiarCampos();//limpiamos los campos de texto
			ventanaConversion.setTiposCorteComboBox(conversionDAO.llenarComboTiposCorte());//setteamos el combo de cortes
			float suma = conversionDAO.buscarTotalFactor();//buscamos la suma total de los factores de conversiones en activo
			if (suma>1){//si la suma es mayor que 1, le informa al usuario que ha sobrepasado el limite
				ventanaConversion.mostrarMensaje("Se ha sobrepasado el factor total. Debe disminuir el factor (eliminando o modicando) conversiones.");
			}
			else if(suma<0.97){//si la suma es menor que 0.93 (margen de error de 0.03), le informa al usuario//si la suma es menor que 0.93 (margen de error de 0.03), le informa al usuario
				ventanaConversion.mostrarMensaje("La tabla de conversion no esta completa. Necesita completar el 100% de una pieza. \n Debe Agregar o modificar conversiones.");
			}
		}
		
	}
	
	public void buscarConversion(){
		if(ventanaConversion.getCodigoConversion().equals("")){//validamos que el campo del codigo non este vacio
			ventanaConversion.mostrarMensaje("Ingrese el codigo de conversion!");//si esta vacio le informamos al usuario que debe introducir un codigo

		}
		else{//si el campo del codigo no esta vacio realiza las siguientes instrucciones
			String codigoConversion = ventanaConversion.getCodigoConversion();//obtenemos el codigo introducido por el usuario
			Conversion conversion = conversionDAO.buscarConversion(codigoConversion);//buscamos la conversion con el codigo
			if (conversion!=null){//si existe la conversion, realiza las siguientes instrucciones
				String codigoCorte = conversion.getCodigoTipoCorte();//obtenemos de la base de datos el codigo del corte
				String tipoCorte = conversionDAO.buscarNombreCorte(codigoCorte);//buscamos del nombre del corte usando el codigo
				float factor = conversion.getFactor();//obtemos el factor de la base de datos
				ventanaConversion.setTipoCorte(tipoCorte);//setteamos el nombre del corte en el combo
				ventanaConversion.setFactor(factor);//setteamos el factor del corte en la caja de texto
				ventanaConversion.habilitarBuscar(false);//deshabilitamos el boton buscar
				ventanaConversion.habilitarCancelar(true);//habilitamos el boton cancelar
				ventanaConversion.habilitarEliminar(true);//habilitamos el boton eliminar
				ventanaConversion.habilitarGuardar(false);//deshabilitamos el boton guardar
				ventanaConversion.habilitarModificar(true);//habilitamos el boton modificar
				ventanaConversion.habilitarCodigoConversion(true);//habilitamos la caja de texto del codigo
			}
			else ventanaConversion.mostrarMensaje("No existe la conversion");//en el caso de que no encuentre la conversion, se le informa al usuario
		}
	}
	
	public void eliminarConversion(){
		
		if (ventanaConversion.validar() == true) {//validamos que los campos esten llenos

			String codigoConversion = ventanaConversion.getCodigoConversion();//obtenemos el codigo ingresado por el usuario
			
			conversionDAO.eliminarConversion(codigoConversion);//eliminamos logicamente de la base de datos
			ventanaConversion.mostrarMensaje("La conversion ha sido eliminada!");//informamos al usuario que se ha hecho la operacion satisfactoriamente
			ventanaConversion.limpiarCampos();//limpiamos los campos
			ventanaConversion.setTiposCorteComboBox(conversionDAO.llenarComboTiposCorte());//setteamos el combo de cortes
			float suma = conversionDAO.buscarTotalFactor();//obtemos la suma de los factores de las conversiones activas
			if (suma>1){//si es mayor a 1, informamos al usuario que ha superado el limite
				ventanaConversion.mostrarMensaje("Se ha sobrepasado el factor total. Debe disminuir el factor (eliminando o modicando) conversiones.");
			}
			else if(suma<0.97){//si la suma es menor que 0.93 (margen de error de 0.03), le informa al usuario
				ventanaConversion.mostrarMensaje("La tabla de conversion no esta completa. Necesita completar el 100% de una pieza. \n Debe Agregar o modificar conversiones.");
			}
		
		}
	}
	
}
